package DevCode.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import DevCode.Excepcion.DAOExcepcion;
import DevCode.Modelo.CentroFormacion;
import DevCode.Util.ConexionBD;

public class CentroFormacionDAO extends BaseDAO {

	public CentroFormacion nombreCentroFormacion(int CFicodigo)
			throws DAOExcepcion {
		String query = "select CFicodigo, CFvnombre, CFvurl, CFvarchivo, CFctipo from centroformacion where CFicodigo=?";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		CentroFormacion cf = new CentroFormacion();
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, CFicodigo);
			rs = stmt.executeQuery();

			if (rs.next()) {
				cf.setCFicodigo(rs.getInt("CFicodigo"));
				cf.setCFvnombre(rs.getString("CFvnombre"));
				cf.setCFvurl(rs.getString("CFvurl"));
				cf.setCFvarchivo(rs.getString("CFvarchivo"));	
				cf.setCFctipo(rs.getString("CFctipo"));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return cf;		
	}
	
	public Collection<CentroFormacion> listarCentroFormacion()
			throws DAOExcepcion {
		String query = "select CFicodigo, CFvnombre, CFctipo, CFvurl, CFvarchivo from centroformacion";	
		Collection<CentroFormacion> lista = new ArrayList<CentroFormacion>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				CentroFormacion cf = new CentroFormacion();
				cf.setCFicodigo(rs.getInt("CFicodigo"));
				cf.setCFvnombre(rs.getString("CFvnombre"));
				cf.setCFctipo(rs.getString("CFctipo"));
				cf.setCFvurl(rs.getString("CFvurl"));
				cf.setCFvarchivo(rs.getString("CFvarchivo"));	
				lista.add(cf);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;		
	}
	
	public Collection<CentroFormacion> buscarCentroFormacion(String CFvnombre)
			throws DAOExcepcion {
		String query = "select CFicodigo, CFvnombre, CFctipo, CFvurl, CFvarchivo from centroformacion "
					+ "where CFvnombre like ?";
		Collection<CentroFormacion> lista = new ArrayList<CentroFormacion>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + CFvnombre + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				CentroFormacion cf = new CentroFormacion();
				cf.setCFicodigo(rs.getInt("CFicodigo"));
				cf.setCFvnombre(rs.getString("CFvnombre"));
				cf.setCFctipo(rs.getString("CFctipo"));
				cf.setCFvurl(rs.getString("CFvurl"));
				cf.setCFvarchivo(rs.getString("CFvarchivo"));	
				lista.add(cf);				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
	public Collection<CentroFormacion> ConsultarCentroFormacion(String CFvnombre, String CFvurl)
			throws DAOExcepcion {
		String query = "select CFicodigo, CFvnombre, CFvurl from centroformacion where CFvnombre=? or CFvurl=?";
		Collection<CentroFormacion> lista = new ArrayList<CentroFormacion>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, CFvnombre);
			stmt.setString(2, CFvurl);
			rs = stmt.executeQuery();
			while (rs.next()) {
				CentroFormacion cf = new CentroFormacion();
				cf.setCFicodigo(rs.getInt("CFicodigo"));
				cf.setCFvnombre(rs.getString("CFvnombre"));
				cf.setCFvurl(rs.getString("CFvurl"));
				lista.add(cf);				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
	public CentroFormacion guardarCentroFormacion(CentroFormacion cf, int ope) throws DAOExcepcion {
		String query="";
		if (ope == 1){
			query = "insert into centroformacion (`CFvnombre`,`CFctipo`,`CFvurl`,`CFvarchivo`) values (?,?,?,?)";
		}else{
			query = "update centroformacion set CFvnombre=?, CFctipo=?, CFvurl=?, CFvarchivo=? where CFicodigo=?";
		}
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, cf.getCFvnombre());
			stmt.setString(2, cf.getCFctipo());
			stmt.setString(3, cf.getCFvurl());
			stmt.setString(4, cf.getCFvarchivo());
			if (ope != 1){
				stmt.setInt(5, cf.getCFicodigo());
			}
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar / atualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}				
		return cf;
	}
	
}
